/**
 * @file websocket_protocol.h
 * @brief WebSocket通信协议实现
 * @details 定义了基于WebSocket的通信协议实现类
 */
#ifndef _WEBSOCKET_PROTOCOL_H_
#define _WEBSOCKET_PROTOCOL_H_


#include "protocol.h"

#include <web_socket.h>
#include <freertos/FreeRTOS.h>
#include <freertos/event_groups.h>

/**
 * @brief WebSocket协议服务器Hello事件标志
 * @details 用于标识服务器已发送Hello消息的事件
 */
#define WEBSOCKET_PROTOCOL_SERVER_HELLO_EVENT (1 << 0)

/**
 * @brief WebSocket协议实现类
 * @details 实现基于WebSocket的通信协议，继承自Protocol基类
 */
class WebsocketProtocol : public Protocol {
public:
    /**
     * @brief 构造函数
     */
    WebsocketProtocol();
    
    /**
     * @brief 析构函数
     */
    ~WebsocketProtocol();

    /**
     * @brief 启动WebSocket连接
     * @details 初始化并启动与服务器的WebSocket连接
     */
    void Start() override;
    
    /**
     * @brief 发送音频数据
     * @param data 要发送的音频数据
     */
    void SendAudio(const std::vector<uint8_t>& data) override;
    
    /**
     * @brief 打开音频通道
     * @return bool 是否成功打开
     */
    bool OpenAudioChannel() override;
    
    /**
     * @brief 关闭音频通道
     */
    void CloseAudioChannel() override;
    
    /**
     * @brief 检查音频通道是否已打开
     * @return bool 音频通道是否已打开
     */
    bool IsAudioChannelOpened() const override;

private:
    /**
     * @brief 事件组句柄
     * @details 用于管理WebSocket连接的事件
     */
    EventGroupHandle_t event_group_handle_;
    
    /**
     * @brief WebSocket连接对象指针
     */
    WebSocket* websocket_ = nullptr;

    /**
     * @brief 解析服务器Hello消息
     * @param root 服务器Hello消息的JSON对象
     */
    void ParseServerHello(const cJSON* root);
    
    /**
     * @brief 发送文本消息
     * @param text 要发送的文本内容
     * @return bool 是否发送成功
     */
    bool SendText(const std::string& text) override;
};

#endif
